package com.eastfair.home.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.eastfair.core.base.entity.Entity;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;
import com.eastfair.annotation.model.EchoVO;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 报馆服务审核记录历史
 * </p>
 *
 * @author linan
 * @since 2023-04-21
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("hc_report_service_audit_history")
@ApiModel(value = "ReportServiceAuditHistory", description = "报馆服务审核记录历史")
@AllArgsConstructor
public class ReportServiceAuditHistory extends Entity<Long> implements EchoVO {

    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Map<String, Object> echoMap = new HashMap<>();
    /**
     * 是否启用（确认状态）：1是 已确认；0否 未确认
     */
    @ApiModelProperty(value = "是否启用（确认状态）：1是 已确认；0否 未确认")
    @TableField(value = "is_enabled")
    @Excel(name = "是否启用（确认状态）：1是 已确认；0否 未确认")
    private Integer isEnabled;

    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @TableField(value = "is_deleted")
    @Excel(name = "是否删除：1是；0否")
    private Integer isDeleted;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @TableField(value = "subsystem_id")
    @Excel(name = "子系统id")
    private Long subsystemId;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @TableField(value = "tenant_id")
    @Excel(name = "租户id")
    private Long tenantId;

    /**
     * 报馆服务审核ID
     */
    @ApiModelProperty(value = "报馆服务审核ID")
    @TableField(value = "report_service_audit_id")
    @Excel(name = "报馆服务审核ID")
    private Long reportServiceAuditId;

    /**
     * 报馆审核ID
     */
    @ApiModelProperty(value = "报馆审核ID")
    @TableField(value = "report_space_audit_id")
    @Excel(name = "报馆审核ID")
    private Long reportSpaceAuditId;

    /**
     * 报馆id
     */
    @ApiModelProperty(value = "报馆id")
    @TableField(value = "report_space_id")
    @Excel(name = "报馆id")
    private Long reportSpaceId;

    /**
     * 展会id
     */
    @ApiModelProperty(value = "展会id")
    @TableField(value = "exhibition_manage_id")
    @Excel(name = "展会id")
    private Long exhibitionManageId;

    /**
     * 服务项id
     */
    @ApiModelProperty(value = "服务项id")
    @TableField(value = "service_item_id")
    @Excel(name = "服务项id")
    private Long serviceItemId;

    /**
     * 服务名称
     */
    @ApiModelProperty(value = "服务名称")
    @Size(max = 255, message = "服务名称长度不能超过255")
    @TableField(value = "service_name", condition = LIKE)
    @Excel(name = "服务名称")
    private String serviceName;

    /**
     * 服务图片
     */
    @ApiModelProperty(value = "服务图片")
    @Size(max = 255, message = "服务图片长度不能超过255")
    @TableField(value = "pic_url", condition = LIKE)
    @Excel(name = "服务图片")
    private String picUrl;

    /**
     * 计量单位 字典维护
     */
    @ApiModelProperty(value = "计量单位 字典维护")
    @Size(max = 255, message = "计量单位 字典维护长度不能超过255")
    @TableField(value = "cal_unit", condition = LIKE)
    @Excel(name = "计量单位 字典维护")
    private String calUnit;

    /**
     * 服务单价
     */
    @ApiModelProperty(value = "服务单价")
    @TableField(value = "unit_price")
    @Excel(name = "服务单价")
    private BigDecimal unitPrice;

    /**
     * 附加费
     */
    @ApiModelProperty(value = "附加费")
    @TableField(value = "surcharge")
    @Excel(name = "附加费")
    private BigDecimal surcharge;

    /**
     * 服务分类id
     */
    @ApiModelProperty(value = "服务分类id")
    @TableField(value = "service_category_id")
    @Excel(name = "服务分类id")
    private Long serviceCategoryId;

    /**
     * 服务规格id
     */
    @ApiModelProperty(value = "服务规格id")
    @TableField(value = "service_specs_id")
    @Excel(name = "服务规格id")
    private Long serviceSpecsId;

    /**
     * 最小预定量
     */
    @ApiModelProperty(value = "最小预定量")
    @TableField(value = "min_book_num")
    @Excel(name = "最小预定量")
    private Long minBookNum;

    /**
     * 库存
     */
    @ApiModelProperty(value = "库存")
    @TableField(value = "inventory_num")
    @Excel(name = "库存")
    private Long inventoryNum;

    /**
     * 预订数量
     */
    @ApiModelProperty(value = "预订数量")
    @TableField(value = "booking_num")
    @Excel(name = "预订数量")
    private Long bookingNum;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    @Size(max = 255, message = "备注长度不能超过255")
    @TableField(value = "remark", condition = LIKE)
    @Excel(name = "备注")
    private String remark;

    /**
     * 审核状态
     */
    @ApiModelProperty(value = "审核状态")
    @Size(max = 255, message = "审核状态长度不能超过255")
    @TableField(value = "audit_state", condition = LIKE)
    @Excel(name = "审核状态")
    private String auditState;

    /**
     * 审核意见
     */
    @ApiModelProperty(value = "审核意见")
    @Size(max = 512, message = "审核意见长度不能超过512")
    @TableField(value = "audit_opinion", condition = LIKE)
    @Excel(name = "审核意见")
    private String auditOpinion;

    /**
     * 是否生成订单：1是；0否
     */
    @ApiModelProperty(value = "是否生成订单：1是；0否")
    @TableField(value = "generate_order")
    @Excel(name = "是否生成订单：1是；0否")
    private Integer generateOrder;

    /**
     * 预订时间
     */
    @ApiModelProperty(value = "预订时间")
    @TableField(value = "booking_time")
    @Excel(name = "预订时间", format = DEFAULT_DATE_TIME_FORMAT, width = 20)
    private LocalDateTime bookingTime;

    /**
     * 申报系统 字典维护 MENU_AFFILIATION
     */
    @ApiModelProperty(value = "申报系统 字典维护 MENU_AFFILIATION")
    @Size(max = 255, message = "申报系统 字典维护 MENU_AFFILIATION长度不能超过255")
    @TableField(value = "declaration_system", condition = LIKE)
    @Excel(name = "申报系统 字典维护 MENU_AFFILIATION")
    private String declarationSystem;

    /**
     * 服务提供方 字典维护 MENU_AFFILIATION
     */
    @ApiModelProperty(value = "服务提供方 字典维护 MENU_AFFILIATION")
    @Size(max = 255, message = "服务提供方 字典维护 MENU_AFFILIATION长度不能超过255")
    @TableField(value = "provider_system", condition = LIKE)
    @Excel(name = "服务提供方 字典维护 MENU_AFFILIATION")
    private String providerSystem;

    /**
     * 折扣
     */
    @ApiModelProperty(value = "折扣")
    @TableField(value = "discount")
    @Excel(name = "折扣")
    private BigDecimal discount;

    /**
     * 审核人id
     */
    @ApiModelProperty(value = "审核人id")
    @TableField(value = "audit_user_id")
    @Excel(name = "审核人id")
    private Long auditUserId;

    /**
     * 审核人姓名
     */
    @ApiModelProperty(value = "审核人姓名")
    @Size(max = 100, message = "审核人姓名长度不能超过100")
    @TableField(value = "audit_user_name", condition = LIKE)
    @Excel(name = "审核人姓名")
    private String auditUserName;

    /**
     * 审核时间
     */
    @ApiModelProperty(value = "审核时间")
    @TableField(value = "audit_time")
    @Excel(name = "审核时间", format = DEFAULT_DATE_TIME_FORMAT, width = 20)
    private LocalDateTime auditTime;

    /**
     * 业务主体id
     */
    @ApiModelProperty(value = "业务主体id")
    @TableField(value = "business_id")
    @Excel(name = "业务主体id")
    private Long businessId;

    /**
     * 占位号
     */
    @ApiModelProperty(value = "占位号")
    @Size(max = 255, message = "占位号长度不能超过255")
    @TableField(value = "site_code", condition = LIKE)
    @Excel(name = "占位号")
    private String siteCode;


    @Builder
    public ReportServiceAuditHistory(Long id, Long createdBy, LocalDateTime createTime, Long updatedBy, LocalDateTime updateTime, 
                    Integer isEnabled, Integer isDeleted, Long projectId, Long subsystemId, Long tenantId, 
                    Long reportServiceAuditId, Long reportSpaceAuditId, Long reportSpaceId, Long exhibitionManageId, Long serviceItemId, String serviceName, 
                    String picUrl, String calUnit, BigDecimal unitPrice, BigDecimal surcharge, Long serviceCategoryId, Long serviceSpecsId, 
                    Long minBookNum, Long inventoryNum, Long bookingNum, String remark, String auditState, String auditOpinion, 
                    Integer generateOrder, LocalDateTime bookingTime, String declarationSystem, String providerSystem, BigDecimal discount, Long auditUserId, 
                    String auditUserName, LocalDateTime auditTime, Long businessId, String siteCode) {
        this.id = id;
        this.createdBy = createdBy;
        this.createTime = createTime;
        this.updatedBy = updatedBy;
        this.updateTime = updateTime;
        this.isEnabled = isEnabled;
        this.isDeleted = isDeleted;
        this.projectId = projectId;
        this.subsystemId = subsystemId;
        this.tenantId = tenantId;
        this.reportServiceAuditId = reportServiceAuditId;
        this.reportSpaceAuditId = reportSpaceAuditId;
        this.reportSpaceId = reportSpaceId;
        this.exhibitionManageId = exhibitionManageId;
        this.serviceItemId = serviceItemId;
        this.serviceName = serviceName;
        this.picUrl = picUrl;
        this.calUnit = calUnit;
        this.unitPrice = unitPrice;
        this.surcharge = surcharge;
        this.serviceCategoryId = serviceCategoryId;
        this.serviceSpecsId = serviceSpecsId;
        this.minBookNum = minBookNum;
        this.inventoryNum = inventoryNum;
        this.bookingNum = bookingNum;
        this.remark = remark;
        this.auditState = auditState;
        this.auditOpinion = auditOpinion;
        this.generateOrder = generateOrder;
        this.bookingTime = bookingTime;
        this.declarationSystem = declarationSystem;
        this.providerSystem = providerSystem;
        this.discount = discount;
        this.auditUserId = auditUserId;
        this.auditUserName = auditUserName;
        this.auditTime = auditTime;
        this.businessId = businessId;
        this.siteCode = siteCode;
    }

}
